package com.ruoyi.user.mapper;

import java.math.BigDecimal;
import java.util.List;
import com.ruoyi.user.domain.UserShoppingCart;
import com.ruoyi.user.domain.vo.CartItemVO;
import org.apache.ibatis.annotations.Param;

/**
 * 用户购物车Mapper接口
 *
 * @author ruoyi
 * @date 2025-10-21
 */
public interface UserShoppingCartMapper
{
    /**
     * 查询用户购物车
     *
     * @param cartId 用户购物车主键
     * @return 用户购物车
     */
     UserShoppingCart selectUserShoppingCartByCartId(String cartId);

    /**
     * 查询用户购物车列表
     *
     * @param userShoppingCart 用户购物车
     * @return 用户购物车集合
     */
     List<UserShoppingCart> selectUserShoppingCartList(UserShoppingCart userShoppingCart);

    /**
     * 新增用户购物车
     *
     * @param userShoppingCart 用户购物车
     * @return 结果
     */
     int insertUserShoppingCart(UserShoppingCart userShoppingCart);

    /**
     * 修改用户购物车
     *
     * @param userShoppingCart 用户购物车
     * @return 结果
     */
     int updateUserShoppingCart(UserShoppingCart userShoppingCart);

    /**
     * 删除用户购物车
     *
     * @param cartId 用户购物车主键
     * @return 结果
     */
     int deleteUserShoppingCartByCartId(Long customerId, Long merchantId);

    /**
     * 批量删除用户购物车
     *
     * @param cartIds 需要删除的数据主键集合
     * @return 结果
     */
     int deleteUserShoppingCartByCartIds(String[] cartIds);

    List<CartItemVO> selectCartItemsByCustomerAndMerchant(@Param("customerId") Long customerId,
                                                                    @Param("merchantId") Long merchantId);
    BigDecimal selectCartTotalPrice(@Param("customerId") Long customerId,
                                    @Param("merchantId") Long merchantId);
    int incrementCartItem(@Param("customerId") Long customerId,@Param("merchantId") Long merchantId, @Param("productId") Long productId);
    int decrementCartItem(@Param("customerId") Long customerId,@Param("merchantId") Long merchantId, @Param("productId") Long productId);
    UserShoppingCart selectCartItemByKeys(@Param("customerId") Long customerId,
                                          @Param("merchantId") Long merchantId,
                                          @Param("productId") Long productId,
                                          @Param("detailId") Long detailId);
    int insertCartItemByKeys(@Param("customerId") Long customerId,
                             @Param("merchantId") Long merchantId,
                             @Param("productId") Long productId);
}
